package com.ruoyi.asset.service.impl;

import java.util.List;
import java.util.ArrayList;

import com.ruoyi.asset.domain.AstSiteRecord;
import com.ruoyi.asset.domain.AstTask;
import com.ruoyi.asset.service.IAstSiteRecordService;
import com.ruoyi.asset.service.IAstTaskService;
import com.ruoyi.common.core.domain.Ztree;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.asset.mapper.AstSiteMapper;
import com.ruoyi.asset.domain.AstSite;
import com.ruoyi.asset.service.IAstSiteService;
import com.ruoyi.common.core.text.Convert;
import org.springframework.transaction.annotation.Transactional;

/**
 * 站点管理Service业务层处理
 * 
 * @author xunzhe
 * @date 2024-06-11
 */
@Service
public class AstSiteServiceImpl implements IAstSiteService 
{
    @Autowired
    private AstSiteMapper astSiteMapper;

    @Autowired
    private IAstSiteRecordService siteRecordService;

    @Autowired
    private IAstTaskService taskService;

    /**
     * 查询站点管理
     * 
     * @param siteId 站点管理主键
     * @return 站点管理
     */
    @Override
    public AstSite selectAstSiteBySiteId(Long siteId)
    {
        return astSiteMapper.selectAstSiteBySiteId(siteId);
    }

    /**
     * 查询站点管理列表
     * 
     * @param astSite 站点管理
     * @return 站点管理
     */
    @Override
    public List<AstSite> selectAstSiteList(AstSite astSite)
    {
        return astSiteMapper.selectAstSiteList(astSite);
    }

    /**
     * 新增站点管理
     * 
     * @param astSite 站点管理
     * @return 结果
     */
    @Override
    public int insertAstSite(AstSite astSite)
    {
        if(astSite.getParentId()!=null){
            AstSite psite = selectAstSiteBySiteId(astSite.getParentId());
            if(psite!=null){
                astSite.setAncestors(psite.getAncestors() + "," + astSite.getParentId());
            }
        }

        return astSiteMapper.insertAstSite(astSite);
    }

    /**
     * 修改站点管理
     * 
     * @param astSite 站点管理
     * @return 结果
     */
    @Override
    public int updateAstSite(AstSite astSite)
    {
        if(astSite.getParentId()!=null){
            AstSite psite = selectAstSiteBySiteId(astSite.getParentId());
            if(psite!=null){
                astSite.setAncestors(psite.getAncestors() + "," + astSite.getParentId());
            }
        }

        return astSiteMapper.updateAstSite(astSite);
    }

    /**
     * 批量删除站点管理
     * 
     * @param siteIds 需要删除的站点管理主键
     * @return 结果
     */
    @Override
    public int deleteAstSiteBySiteIds(String siteIds)
    {
        return astSiteMapper.deleteAstSiteBySiteIds(Convert.toStrArray(siteIds));
    }

    /**
     * 删除站点管理信息
     * 
     * @param siteId 站点管理主键
     * @return 结果
     */
    @Override
    public int deleteAstSiteBySiteId(Long siteId)
    {
        return astSiteMapper.deleteAstSiteBySiteId(siteId);
    }

    /**
     * 查询站点管理树列表
     * 
     * @return 所有站点管理信息
     */
    @Override
    public List<Ztree> selectAstSiteTree(Long taskId)
    {
        String[] ids = null;
        if(taskId !=null){
            AstTask astTask = taskService.selectAstTaskByTaskId(taskId);
            String siteIds = astTask.getSiteIds();
            if(siteIds !=null && !siteIds.equals("")){
                ids = siteIds.split(",");
            }
        }

        List<AstSite> astSiteList = astSiteMapper.selectAstSiteList(new AstSite());
        List<Ztree> ztrees = new ArrayList<Ztree>();
        for (AstSite astSite : astSiteList)
        {
            Ztree ztree = new Ztree();
            ztree.setId(astSite.getSiteId());
            ztree.setpId(astSite.getParentId());
            ztree.setName(astSite.getSiteName());
            ztree.setTitle(astSite.getSiteName());

            if(ids != null){
                for(String idStr : ids){
                    if(idStr.equals(astSite.getSiteId().toString())){
                        ztree.setChecked(true);
                    }
                }
            }
            ztrees.add(ztree);
        }
        return ztrees;
    }

    @Transactional
    public int xunjian(AstSiteRecord siteRecord)
    {
        AstSite astSite = new AstSite();
        astSite.setXunjianTime(siteRecord.getCreateTime());
        astSite.setSiteId(siteRecord.getSiteId());
        astSiteMapper.updateAstSite(astSite);

        return siteRecordService.insertAstSiteRecord(siteRecord);
    }

    public int selectCount(Long parentId){
        return astSiteMapper.selectCount(parentId);
    }

}
